﻿using Pe.Petecos.Comercial.Aplicacion.TransferObject.General;
using Pe.Petecos.Comercial.Presentacion.Resource.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace Pe.Petecos.Comercial.Presentacion.Core.ViewModel.Base
{
    public class GenericViewModel
    {

        protected List<SelectListItem> GenerarListadoOpcioneGenericoFiltro(List<DataOpcion> opciones, string seleccionado = null)
        {
            var opcionesCasteadas = CastearOpcioneGenerico(opciones, seleccionado);
            return GenerarListadoOpcioneGenericoFiltro(opcionesCasteadas);
        }

        protected List<SelectListItem> GenerarListadoOpcioneGenericoFiltro(List<SelectListItem> opciones = null)
        {
            return GenerarListadoOpcioneGenerico(GenericoResource.EtiquetaTodos, opciones);
        }

        protected List<SelectListItem> GenerarListadoOpcioneGenericoSeleccion(List<DataOpcion> opciones, string seleccionado = null)
        {
            var opcionesCasteadas = CastearOpcioneGenerico(opciones, seleccionado);
            return GenerarListadoOpcioneGenericoSeleccion(opcionesCasteadas);
        }

        protected List<SelectListItem> GenerarListadoOpcioneGenericoSeleccion(List<SelectListItem> opciones = null)
        {
            return GenerarListadoOpcioneGenerico(GenericoResource.EtiquetaSeleccionar, opciones);
        }

        protected List<SelectListItem> GenerarListadoOpcioneGenerico(string etiquetaPrimaria, List<SelectListItem> opciones = null)
        {
            List<SelectListItem> resultado = new List<SelectListItem>();
            resultado.Add(new SelectListItem() { Value = "", Text = etiquetaPrimaria, Selected = true });
            if (opciones != null)
            {
                resultado.AddRange(opciones);
            }

            return resultado;
        }

        private List<SelectListItem> CastearOpcioneGenerico(List<DataOpcion> opciones, string seleccionado = null)
        {
            List<SelectListItem> resultado = opciones.Select(i => new SelectListItem()
            {
                Value = i.Valor.ToString(),
                Text = i.Nombre.ToString(),
                Selected = seleccionado != null ? (i.Valor == seleccionado) : false
            }).ToList();
            return resultado;
        }
    }
}
